[小ネタ] Vimからcfn-python-lintを使ってみた
はじめに
Cloud Formationのテンプレートを書く際、普段使っているVimで構文エラーチェックができると便利です。
そこで、Vimの非同期LinterプラットフォームであるALEを使い、Cloud FormationのLinter(cfn-python-lint)をVimから呼び出す設定について調べてみました。
(最後にcfn-python-lint自体の設定についても触れています。)
検証環境
以下、手元の検証環境です。
- Vim
$ vim --version | head -n 1 VIM - Vi IMproved 8.1 (以下略)
-
cfn-python-lint
$ cfn-lint --version cfn-lint 0.27.4
準備
下記ページを参考にcfn-python-lintをインストールします。
GitHub - aws-cloudformation / cfn-python-lint
$ pip install cfn-lint
コマンド名はcfn-lint
ですが、npmのcfn-lintとは別物である点にご注意下さい。
ALE自体の導入方法は、ここではvim-plugを使った例のみ記載しておきます。詳細は以下をご確認下さい。
GitHub - dense-analysis / Asynchronous Lint Engine
Plug 'w0rp/ale'
設定
まず、ALEでcfn-lintを使用する設定を.vimrcなど設定ファイルに記載します。特にパス等の設定は必要ありません。
let g:ale_linters = { \ 'template.yml': ['cfn-lint'], \}
続いて、suffixがtemplate.yml/yamlのファイルをCloud Formationのテンプレートファイルであると認識させるための設定です。
ft(File Type)にcloudformation.yaml
をsetします。
augroup cfn-template autocmd! autocmd BufRead,BufNewFile *.template.yml,*template.yaml set ft=cloudformation.yaml augroup end
以下の項目は任意です。 ALEのオプションは複数ありますが、お好みで設定して下さい。マッピングも任意のものにご変更下さい。
let g:ale_lint_on_enter = 0 " 起動時に非同期での実行をOFF let g:ale_set_quickfix = 1 " Quickfixリストを使用する nmap <silent>, <plug>(ale_toggle) " ALEのON/OFF切替を「,」キーにマッピング
また、cfn-python-lint自体の設定(Error/Warningの除外設定)は.cfnlintrc
をhomeに作成し以下のように記述します。
(例) 「プロパティをBoolean型で書くべき」というエラー表示を抑制します。
configure_rules: E3012: strict: False
ルールの詳細についてはdocの中のrules.md
をご参照下さい。
GitHub - aws-cloudformation / cfn-python-lint Rules
- 設定後のVim画面イメージ
Enabledをあえてコメントアウトし、エラーを表示させています。
※複数のプラグインや設定も同時に多く使用しており、このページで紹介した設定だけでは上記の画面と同一の表示にはなりません。
おまけ
YAMLファイルをVimで扱う際におすすめなタブの設定について、ご紹介します。
Vimを最近使い始めた方は、上記と併せて試して頂ければと思います。
set expandtab smarttab augroup yaml-tab autocmd! autocmd BufRead,BufNewFile *.yml,*.yaml setlocal tabstop=2 shiftwidth=2 softtabstop=2 augroup end
オプションは相互に関連した部分もあるため、厳密な説明は参考文献3(非常に分かりやすいです!)をご参照ください。
ここでは天下り的な説明になりますが、
YAMLファイルをバッファで開いた時に、tabキーを押すと2文字分のスペースが挿入される
設定です。とりあえず今回のALEの設定を試してみたい、という場合には良いと思います。
さいごに
ちなみにVS Codeのプラグインを見てみると、cform-VSCodeも比較的多く使われているようです。
デプロイ前の確認に際しては、もちろんvalidate-template
も有用ですが、いくつかのツールで確認してから実行することで、より効率よく作業できると思われます。
どなたかに届けば幸いです。